package com.liujun.io.nio.mysql.server;

import java.io.IOException;
import java.nio.channels.Selector;

import com.liujun.io.nio.mysql.bean.SocketDataTran;
import com.liujun.io.nio.mysql.protocol.MysqlProtocolProcess;
import com.liujun.io.nio.mysql.trans.DataParseProcess;
import com.liujun.io.nio.mysql.trans.TransDataManager;

/**
 * 中间转换服务 源文件名：MidTransServer.java 文件版本：1.0.0 创建作者：liujun 创建日期：2016年8月24日
 * 修改作者：liujun 修改日期：2016年8月24日 文件描述：liujun 版权所有：Copyright 2016 zjhz, Inc. All
 * Rights Reserved.
 */
public class MidTransServer {

    /**
     * 进行中间转换服务的 方法描述
     * 
     * @throws IOException
     * @创建日期 2016年8月18日
     */
    public void run() throws IOException {

        // 连接通道使用一个多路选择器
        Selector connSelector = Selector.open();

        // 创建本地中转服务信息
        MultiplexerPortMsgService port1Init = new MultiplexerPortMsgService();
        port1Init.serverInit(connSelector);

        // 从服务器读取数据队列
        DataParseProcess<SocketDataTran> serviceToClient = new DataParseProcess<SocketDataTran>();

        // 往服务器写数据队列
        DataParseProcess<SocketDataTran> clientToMysqlServer = new DataParseProcess<SocketDataTran>();

        // 进行数扰操作
        TransDataManager tranManager = new TransDataManager();

        // 连接的多路选择器的遍历
        MultMidToMysqlServerConnection connSelect = new MultMidToMysqlServerConnection(connSelector, tranManager,
                serviceToClient, clientToMysqlServer);
        new Thread(connSelect, "MidTransServer Process connect port -001").start();

        // 启动协议读取器
        new Thread(new MysqlProtocolProcess(serviceToClient, clientToMysqlServer)).start();

        System.out.println("服务端启动成功。。。。");
    }

    public static void main(String[] args) throws IOException {

        MidTransServer trans = new MidTransServer();
        trans.run();

    }
}
